In the context of networking and/or communications, computing devices often establish, configure, and/or coordinate connections with one another via connection-establishment handshakes. For example, a client device and a server may establish a Transmission Control Protocol (TCP) connection with one another over an Internet Protocol (IP) network by way of a TCP handshake. In this example, the TCP connection may enable applications running on the client device and the server to communicate with one another via the IP network.
Some traditional connection-establishment handshakes may be performed exclusively in kernel space. For example, the operating system kernel on the client device may initiate the TCP handshake by sending a synchronize message (sometimes referred to as a SYN) to the server. In this example, the operating system kernel on the server may receive the SYN from the client device and then, in response, send back a synchronize acknowledgement (sometimes referred to as a SYN-ACK). Upon receiving the SYN-ACK from the server, the operating system kernel on the client device may send an acknowledgment message (sometimes referred to as an ACK) to the server. The completion of these 3 operations (SYN, SYN-ACK, and ACK) may mark the successful establishment of a TCP connection between the client device and the server.
Unfortunately, since such traditional connection-establishment handshakes are performed exclusively in kernel space, the applications communicating with one another via the TCP connection may have little, if any, involvement in the configuration of the TCP connection. For example, the TCP connection may be intended for and/or involve an application installed and/or running in user space on the server. However, during the TCP handshake, this application may be unaware that the TCP handshake is even taking place. Accordingly, the application may become aware of the TCP connection only after the server has received the ACK from the client device and the TCP connection has been successfully established. As a result, the application may be unable to select certain attributes (such as the maximum segment size and/or socket options) of the TCP connection, which could potentially necessitate post-connection adjustments and/or lead to communication interruptions and/or failures.
The instant disclosure, therefore, identifies and addresses a need for improved and/or additional methods, systems, and apparatuses for achieving user space intervention during connection-establishment handshakes.